10 DEFINT A-Z
20 DIM RE(25), CE(25), MV(25), VM(10), MC(25), CM(10)
30 KEY OFF : SCREEN 0 : WIDTH 40 :CLS
40 F = 1
50 RANDOMIZE CVI(MID$(TIME$,7,2))
60 VM(1) = 1: VM(2) = 1: VM(3) = 1: VM(4) = 1: VM(5) = 2
70 VM(6) = 2: VM(7) = 2: VM(8) = 3: VM(9) = 3: VM(10) = 5
80 CM(1) = 25:CM(2) =25: CM(3) =25: CM(4) =25: CM(5)=157
90 CM(6) = 157: CM(7) =157: CM(8) = 15:CM(9)=15:CM(10) = 2
100 LOCATE 7,1
140 PRINT "        Press 4 for 40 columns"
150 PRINT "        Press 8 for 80 columns";:LOCATE ,,0
160 X$ = INKEY$
170 IF X$ = "4" THEN GOSUB 1230 : GOTO 200
180 IF X$ = "8" THEN GOSUB 1390 : GOTO 200
181 IF X$ = "Q" THEN CLS :END
185 IF X$ = "r" THEN GOSUB 3000
190 GOTO 160
200 X$ = INKEY$
210 IF X$ = "e" THEN MM=21 : LV=15 : SLV=2 : NE=25-2*F : GOTO 270
220 IF X$ = "m" THEN MM=21 : LV=10 : SLV=7 : NE=20-2*F : GOTO 270
230 IF X$ = "h" THEN MM=21 : LV=10 : SLV=10: NE=15-2*F : GOTO 270
240 IF X$ = "v" THEN MM=21 : LV=5  : SLV=15: NE=10-F : GOTO 270
250 IF X$ = "Q" THEN CLS : END
260 GOTO 200
270 CLS : LOCATE 12,28,0 : PRINT "G o o d   L u c k !";
275 HITS = 0: MISSES =0
280 FOR I = 1 TO 2000 : NEXT I
290 CLS
300 LOCATE 1,SC,0 :PRINT "SCORE 0";
310 LOCATE 1,RM,0 :PRINT "REMAINING ";MM
320 IF SIZE = 40 THEN 370
330 S$ = " 11223344556677889900qqwweerrttyyuuiiooppaassddffgghhjjkkll;;zzxxccvvbbnnmm,,.."
340 LOCATE 25,1,0 : PRINT S$;
350 LOCATE 24,1,0 :PRINT " ";:FOR I = 1 TO 39 :PRINT CHR$(223);CHR$(223); :NEXT
360 GOTO 400
370 S$ = "1234567890qwertyuiopasdfghjkl;zxcvbnm,."
380 LOCATE 25,1,0 : PRINT S$;
390 LOCATE 24,1,0 : FOR I = 1 TO 39 : PRINT CHR$(223); :NEXT
400 OLDPOS = 20 :NEWPOS = 20 : GOSUB 930
410 FOR N = 1 TO NE : GOSUB 1050 :NEXT
420 NP = 1
430 REM
440 RN = RE(NP) + 1 : CN = CE(NP)
450 IF RN < 23 THEN LOCATE RN-1,CN,0 : PRINT " "; :LOCATE RN,CN,0 : PRINT CHR$(MC(NP)); : RE(NP) = RN : GOTO 480
460 LOCATE 22,CN,0 : PRINT " "; : N = NP
470 IF (CN = NEWPOS) OR (CN = NEWPOS+1) THEN GOSUB 1100:GOSUB 1050 ELSE GOSUB 1020
480 X$ = INKEY$
490 IF X$ = "Q" THEN CLS :END
500 IF X$ ="1" THEN NEWPOS =1: GOSUB 930
510 IF X$ ="2" THEN NEWPOS =2: GOSUB 930
520 IF X$ ="3" THEN NEWPOS =3: GOSUB 930
530 IF X$ ="4" THEN NEWPOS =4: GOSUB 930
540 IF X$ ="5" THEN NEWPOS =5: GOSUB 930
550 IF X$ ="6" THEN NEWPOS =6: GOSUB 930
560 IF X$ ="7" THEN NEWPOS =7: GOSUB 930
570 IF X$ ="8" THEN NEWPOS =8: GOSUB 930
580 IF X$ ="9" THEN NEWPOS =9: GOSUB 930
590 IF X$ ="0" THEN NEWPOS =10: GOSUB 930
600 IF X$ ="q" THEN NEWPOS =11: GOSUB 930
610 IF X$ ="w" THEN NEWPOS =12: GOSUB 930
620 IF X$ ="e" THEN NEWPOS =13: GOSUB 930
630 IF X$ ="r" THEN NEWPOS =14: GOSUB 930
640 IF X$ ="t" THEN NEWPOS =15: GOSUB 930
650 IF X$ ="y" THEN NEWPOS =16: GOSUB 930
660 IF X$ ="u" THEN NEWPOS =17: GOSUB 930
670 IF X$ ="i" THEN NEWPOS =18: GOSUB 930
680 IF X$ ="o" THEN NEWPOS =19: GOSUB 930
690 IF X$ ="p" THEN NEWPOS =20: GOSUB 930
700 IF X$ ="a" THEN NEWPOS =21: GOSUB 930
710 IF X$ ="s" THEN NEWPOS =22: GOSUB 930
720 IF X$ ="d" THEN NEWPOS =23: GOSUB 930
730 IF X$ ="f" THEN NEWPOS =24: GOSUB 930
740 IF X$ ="g" THEN NEWPOS =25: GOSUB 930
750 IF X$ ="h" THEN NEWPOS =26: GOSUB 930
760 IF X$ ="j" THEN NEWPOS =27: GOSUB 930
770 IF X$ ="k" THEN NEWPOS =28: GOSUB 930
780 IF X$ ="l" THEN NEWPOS =29: GOSUB 930
790 IF X$ =";" THEN NEWPOS =30: GOSUB 930
800 IF X$ ="z" THEN NEWPOS =31: GOSUB 930
810 IF X$ ="x" THEN NEWPOS =32: GOSUB 930
820 IF X$ ="c" THEN NEWPOS =33: GOSUB 930
830 IF X$ ="v" THEN NEWPOS =34: GOSUB 930
840 IF X$ ="b" THEN NEWPOS =35: GOSUB 930
850 IF X$ ="n" THEN NEWPOS =36: GOSUB 930
860 IF X$ ="m" THEN NEWPOS =37: GOSUB 930
870 IF X$ ="," THEN NEWPOS =38: GOSUB 930
880 IF X$ ="." THEN NEWPOS =39: GOSUB 930
890 IF MISSES > MM THEN GOTO 1130
900 NP = NP + 1 : IF NP = NE THEN NP = 1
910 GOTO 430
920 REM
930 IF SIZE = 40 THEN 980
940 NEWPOS = 2*NEWPOS : LOCATE 23,OLDPOS,0:PRINT "  ";
950 LOCATE 23,NEWPOS,0:PRINT CHR$(211);CHR$(189);
960 OLDPOS = NEWPOS
970 RETURN
980 LOCATE 23,OLDPOS,0 :PRINT " ";
990 LOCATE 23,NEWPOS,0 :PRINT CHR$(127);
1000 OLDPOS = NEWPOS
1010 RETURN
1020 SOUND 15000,1 :SOUND 10000,1 :SOUND 5000,1
1030 MISSES = MISSES + 1
1040 LOCATE 1,RM+11,0 : PRINT MM-MISSES+1;
1050 RE(N) = RND*LV + SLV : CE(N) = RND*RPOS + RS
1060 MT = RND*9 + 1
1070 MV(N) = VM(MT) : MC(N) = CM(MT)
1080 LOCATE RE(N),CE(N),0 :PRINT CHR$(MC(N));
1090 RETURN
1100 SOUND 2000,1 : SOUND 1000,1
1110 HITS = HITS + MV(NP) : LOCATE 1,SC+6,0 : PRINT HITS;
1120 RETURN
1130 REM      levels of achievement
1140 IF HITS < F*10 THEN FOR I = 370 TO 300 STEP -3: SOUND I,1 :NEXT :GOTO 1210
1150 IF HITS < F*60 THEN FOR I = -8 TO 10 STEP 1 : SOUND 420 + I*ABS(I),1 :NEXT  :GOTO 1210
1160 IF HITS < F*100 THEN PLAY "o3cco2cc" :GOTO 1210
1170 IF HITS < F*150 THEN PLAY "o3msl4t210ceeemnl2c" :GOTO 1210
1180 IF HITS < F*200 THEN FOR I = 10000 TO 2700 STEP -53:SOUND I,1:NEXT I :GOTO 1210
1190 IF HITS < F*250 THEN PLAY "l2o4cdefgl4gggo5l1c":GOTO 1210
1200 IF HITS > F*250 THEN GOSUB 1620
1210 LOCATE 3,1,0 : INPUT "GAME OVER press return to continue ",X$
1215 IF SIZE = 40 THEN GOSUB 1230 ELSE GOSUB 1390
1220 GOTO 200
1230 WIDTH 40 : CLS :PRINT
1240 SIZE = 40 : RPOS = 38 : SC = 1: RM = 20 : RS = 1
1250 PRINT "                CATCH88" : PRINT
1260 PRINT "The object of the game is to catch 'em"
1270 PRINT "          before they fall."
1280 PRINT
1290 PRINT : PRINT "       ";CHR$(25);"  is worth 1 point."
1300 PRINT "       ";CHR$(157);"  is worth 2 points."
1310 PRINT "       ";CHR$(15);"  is worth 3 points."
1320 PRINT "       ";CHR$(2);"  is worth 5 points."
1330 PRINT : PRINT : PRINT "   A capital  Q  will stop the game."
1340 PRINT : PRINT
1350 PRINT "   Choose a suitable level of play :"
1360 PRINT :PRINT
1370 PRINT "e(asy  m(edium  h(ard  v(ery hard  Q(uit  ";
1380 RETURN
1390 WIDTH 80 : CLS : SIZE = 80 : RPOS = 77 : SC = 10 : RM = 50:RS = 2
1400 PRINT
1410 PRINT SPC(19) " [[[[  [[[  [[[[[  [[[[ [   [  [[[   [[[ "
1420 PRINT SPC(19) "[     [   [   [   [     [   [ [   [ [   ["
1430 PRINT SPC(19) "[     [   [   [   [     [   [ [   [ [   ["
1440 PRINT SPC(19) "[     [[[[[   [   [     [[[[[  [[[   [[[ "
1450 PRINT SPC(19) "[     [   [   [   [     [   [ [   [ [   ["
1460 PRINT SPC(19) "[     [   [   [   [     [   [ [   [ [   ["
1470 PRINT SPC(19) " [[[[ [   [   [    [[[[ [   [  [[[   [[[ "
1480 PRINT
1490 PRINT SPC(10) "The object of the game is to catch 'em before they fall."
1500 PRINT SPC(12) "Move the basket by pressing the correct letter key."
1510 PRINT
1520 PRINT : PRINT  SPC(29) CHR$(25);"  is worth 1 point."
1530 PRINT  SPC(29) CHR$(157);"  is worth 2 points."
1540 PRINT  SPC(29) CHR$(15);"  is worth 3 points."
1550 PRINT  SPC(29) CHR$(2);"  is worth 5 points."
1560 PRINT : PRINT : PRINT  SPC(24) "A capital  Q  will stop the game."
1570 PRINT
1580 PRINT SPC(24) "Choose a suitable level of play :"
1590 PRINT :PRINT SPC(19) "e(asy  m(edium  h(ard  v(ery hard   Q(uit";
1600 LOCATE 12,1,0
1610 RETURN
1620 CLS : PRINT :PRINT "     I really did'nt think anyone was"
1630 PRINT "that fast.  Rescaling ....":PRINT :PRINT:FOR I = 1 TO 2000:NEXT
1640 SOUND 37,180:FOR I = 1 TO 14000:NEXT:SOUND 37,0
1650 F = F*2 :PRINT "Next time you run this program,"
1660 PRINT "press the letter r before you"
1670 PRINT "enter a 4 or 8.  My very best luck."
1680 PRINT :PRINT "                           RKC"
1690 RETURN
3000 INPUT "Enter your factor number  ",F
3001 IF F > 5 THEN PRINT "Be reasonable !" : GOTO 3000
3002 RETURN
